package com.mes.cloud.dao;

import com.mes.cloud.api.dto.request.UpdateEnableRequest;
import com.mes.cloud.api.dto.request.position.SynchroPositionUpdateByOrganizationIdAndEmployeeIdRequest;
import com.mes.cloud.api.dto.request.position.SysPositionPageRequest;
import com.mes.cloud.entity.SysPosition;
import com.mes.cloud.entity.param.SysPositionUpdateNameByType;
import com.mes.cloud.entity.vo.organization.SysOrganizationPositionVo;
import com.mes.cloud.entity.vo.position.SysPositionDetailsVo;
import com.mes.cloud.entity.vo.position.SysPositionPageVo;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.ids.SelectByIdsMapper;

import java.util.List;

/**
 * 岗位表
 *
 * @author xy
 * @version 2019-08-03 08:39:11
 * @email yuan.xue3@pactera.com
 */
public interface SysPositionDao extends SelectByIdsMapper<SysPosition>, Mapper<SysPosition> {

    /**
     * <通过组织id查询岗位及岗位负责人信息>
     *
     * @param request
     * @return List<SysOrganizationPositionVo>
     * @author xy
     * @date 2019/8/3 9:18
     */
    List<SysOrganizationPositionVo> getSysOrganizationPosition(SysPositionPageRequest request);

    /**
     * <通过组织id查询岗位>
     *
     * @param pageRequest
     * @return List<SysPositionPageVo>
     * @author xy
     * @date 2019/8/5 14:11
     */
    List<SysPositionPageVo> pageList(SysPositionPageRequest pageRequest);

    /**
     * <批量更新启用、禁用状态>
     *
     * @param updateEnableRequest
     * @return int
     * @author xy
     * @date 2019/8/6 9:14
     */
    int batchUpdateEnable(UpdateEnableRequest updateEnableRequest);

    /**
     * <通过id查询岗位详细信息>
     *
     * @param id
     * @return
     * @author xy
     * @date 2019/8/7 11:17
     */
    SysPositionDetailsVo getSysPositionDetail(String id);

    /**
     * 通过CODE更新岗位信息
     * @param sysPositionParam
     * @return
     */
    int updateByCode(SysPosition sysPositionParam);

    /**
     * 通过组织ID更新岗位是否主要负责人
     * @param sysPositionParam
     * @return
     */
    int updateByOrganizationId(SysPosition sysPositionParam);

    /**
     * 岗位表关联员工岗位表更新是否主要负责人
     * @param synchroPositionUpdateByOrganizationIdAndEmployeeIdRequest
     * @return
     */
    int updateByOrganizationIdAndEmployeeId(SynchroPositionUpdateByOrganizationIdAndEmployeeIdRequest synchroPositionUpdateByOrganizationIdAndEmployeeIdRequest);

    int updateByType(SysPosition sysPositionParam);

    /**
     * 通过岗位类型更新岗位的名称
     * @param sysPositionUpdateNameByType
     */
    int updateNameByType(SysPositionUpdateNameByType sysPositionUpdateNameByType);

    List<SysPosition> vacantPositionList(String type);


    /**
     * 获取没有上级的岗位
     * @return
     */
    List<SysPosition> getNoSuperior();
}
